/*
Language: HTMLBars
Requires: xml.js
Author: Michael Johnston <lastobelus@gmail.com>
Description: Matcher for HTMLBars
Website: https://github.com/tildeio/htmlbars
Category: template
*/

export default function (hljs) {
    var BUILT_INS =
        'action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view';
    var ATTR_ASSIGNMENT = {
        illegal: /\}\}/,
        begin: /[a-zA-Z0-9_]+=/,
        returnBegin: true,
        relevance: 0,
        contains: [
            {
                className: 'attr',
                begin: /[a-zA-Z0-9_]+/
            }
        ]
    };
    var TAG_INNARDS = {
        endsWithParent: true,
        relevance: 0,
        keywords: {
            keyword: 'as',
            built_in: BUILT_INS
        },
        contains: [hljs.QUOTE_STRING_MODE, ATTR_ASSIGNMENT, hljs.NUMBER_MODE]
    };
    return {
        name: 'HTMLBars',
        case_insensitive: true,
        subLanguage: 'xml',
        contains: [
            hljs.COMMENT('{{!(--)?', '(--)?}}'),
            {
                className: 'template-tag',
                begin: /\{\{[#\/]/,
                end: /\}\}/,
                contains: [
                    {
                        className: 'name',
                        begin: /[a-zA-Z\.\-]+/,
                        keywords: {
                            'builtin-name': BUILT_INS
                        },
                        starts: TAG_INNARDS
                    }
                ]
            },
            {
                className: 'template-variable',
                begin: /\{\{[a-zA-Z][a-zA-Z\-]+/,
                end: /\}\}/,
                keywords: {
                    keyword: 'as',
                    built_in: BUILT_INS
                },
                contains: [hljs.QUOTE_STRING_MODE]
            }
        ]
    };
}
